﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;

namespace Insifo.BL.Gen
{
    public class BLMoneda
    {
        DLMoneda _dl = new DLMoneda();
        DLMonedaAplicacion _dlApl = new DLMonedaAplicacion();
        DLTransactionMng _transaccion = null;

        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEMoneda pbe)
        {
            return _dl.Listar(pbe);
        }

        /// <summary>
        /// Método obtiene las Monedas
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar_Sel(BEMoneda pbe)
        {
            return _dl.Listar_Sel(pbe);
        }

        /// <summary>
        /// Lista las Aplicaciones por Moneda
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public DataSet ListarAplicacion(BEMoneda pbe)
        {
            return _dlApl.Listar(pbe);
        }


        /// <summary>
        /// Lista las Aplicaciones por Moneda
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public DataSet ListarPorAplicacion(BEMonedaAplicacion pbe)
        {
            return _dl.ListarPorAplicacion(pbe);
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEMoneda Obtener(BEMoneda pbe)
        {
            return _dl.Obtener(pbe);
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEMoneda Insertar(BEMoneda pbe)
        {
            BEMoneda be = null;
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;


                be = _dl.Insertar(pbe);

                foreach (BEMonedaAplicacion beAplicacion in pbe.Aplicaciones)
                {
                    beAplicacion.IdAplicacion = be.Id;
                    _dlApl.Insertar(beAplicacion);
                }
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return be;
        }
        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEMoneda Actualizar(BEMoneda pbe)
        {
            BEMoneda be = null;
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;


                be = _dl.Actualizar(pbe);

                foreach (BEMonedaAplicacion beAplicacion in pbe.Aplicaciones)
                {
                    _dlApl.Insertar(beAplicacion);
                }
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEMoneda Eliminar(BEMoneda pbe)
        {
            return _dl.Eliminar(pbe);
        }

    }
}
